package com.ruoyi.product.service.impl;

import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.context.SecurityContextHolder;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
import com.ruoyi.product.model.ProductRuleAttrModel;
import com.ruoyi.product.service.IMallProductRuleAttrInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.product.mapper.MallProductRuleInfoMapper;
import com.ruoyi.product.domain.MallProductRuleInfo;
import com.ruoyi.product.service.IMallProductRuleInfoService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 商品规格Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-07-25
 */
@Service
public class MallProductRuleInfoServiceImpl implements IMallProductRuleInfoService 
{
    @Autowired
    private MallProductRuleInfoMapper mallProductRuleInfoMapper;
    @Autowired
    private IMallProductRuleAttrInfoService iMallProductRuleAttrInfoService;
    /**
     * 查询商品规格
     * 
     * @param id 商品规格主键
     * @return 商品规格
     */
    @Override
    public MallProductRuleInfo selectMallProductRuleInfoById(String id)
    {
        return mallProductRuleInfoMapper.selectMallProductRuleInfoById(id);
    }

    /**
     * 查询商品规格列表
     * 
     * @param mallProductRuleInfo 商品规格
     * @return 商品规格
     */
    @Override
    public List<MallProductRuleInfo> selectMallProductRuleInfoList(MallProductRuleInfo mallProductRuleInfo)
    {
        return mallProductRuleInfoMapper.selectMallProductRuleInfoList(mallProductRuleInfo);
    }

    /**
     * 新增商品规格
     * 
     * @param mallProductRuleInfo 商品规格
     * @return 结果
     */
    @Transactional
    @Override
    public int insertMallProductRuleInfo(MallProductRuleInfo mallProductRuleInfo)
    {
        mallProductRuleInfo.setId(IdUtils.simpleUUID());
        mallProductRuleInfo.setCreateBy(SecurityContextHolder.getUserId().toString());
        mallProductRuleInfo.setCreateTime(DateUtils.getNowDate());
        //获取规格属性

        String ruleAttr = mallProductRuleInfo.getRuleAttr();
        //将ruleAttr内容解析放到model实体类中
        List<ProductRuleAttrModel> ruleAttrModelList = JSONObject.parseArray(ruleAttr,ProductRuleAttrModel.class);
        //将规格id赋值给ProductRuleAttrModel实体类中的ruleId
        String ruleId = mallProductRuleInfo.getId();
        ruleAttrModelList.forEach(ruleAttrMode->ruleAttrMode.setRuleId(ruleId));
        int i = mallProductRuleInfoMapper.insertMallProductRuleInfo(mallProductRuleInfo);
        //将存储规格的数据集合传入到规格属性的业务层
        iMallProductRuleAttrInfoService.batchInsert(ruleAttrModelList);
        return i;
    }

    /**
     * 修改商品规格
     * 
     * @param mallProductRuleInfo 商品规格
     * @return 结果
     */
    @Transactional
    @Override
    public int updateMallProductRuleInfo(MallProductRuleInfo mallProductRuleInfo)
    {
        mallProductRuleInfo.setUpdateBy(SecurityContextHolder.getUserId().toString());
        mallProductRuleInfo.setUpdateTime(DateUtils.getNowDate());
        //根据id删除数据 1）根据rule_id删除mall_product_rule_attr_info表的数据
        iMallProductRuleAttrInfoService.deleteMallProductRuleAttrInfoByRuleId(new String[]{mallProductRuleInfo.getId()});
        //批量添加 2）再次向mall_product_rule_attr_info表中批量添加修改后的数据
        String ruleAttr = mallProductRuleInfo.getRuleAttr();
        //将ruleAttr内容解析放到model实体类中
        List<ProductRuleAttrModel> ruleAttrModelList = JSONObject.parseArray(ruleAttr,ProductRuleAttrModel.class);
        //将规格id赋值给ProductRuleAttrModel实体类中的ruleId
        String ruleId = mallProductRuleInfo.getId();
        ruleAttrModelList.forEach(ruleAttrMode->ruleAttrMode.setRuleId(ruleId));
        //将存储规格的数据集合传入到规格属性的业务层
        iMallProductRuleAttrInfoService.batchInsert(ruleAttrModelList);
        //3）更新mall_product_rule_info表
        return mallProductRuleInfoMapper.updateMallProductRuleInfo(mallProductRuleInfo);
    }

    /**
     * 批量删除商品规格
     * 
     * @param ids 需要删除的商品规格主键
     * @return 结果
     */
    @Override
    @Transactional
    public int deleteMallProductRuleInfoByIds(String[] ids)
    {
        //根据id到mall_product_rule_attr_info表中删除数据
        iMallProductRuleAttrInfoService.deleteMallProductRuleAttrInfoByRuleId(ids);
        return mallProductRuleInfoMapper.deleteMallProductRuleInfoByIds(ids);
    }

    /**
     * 删除商品规格信息
     * 
     * @param id 商品规格主键
     * @return 结果
     */
    @Override
    public int deleteMallProductRuleInfoById(String id)
    {
        return mallProductRuleInfoMapper.deleteMallProductRuleInfoById(id);
    }
}
